﻿using CREAPA.Dominio;
using CREAPA.RepositorioADO;
using CREAPA.UL.Web.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace CREAPA.UL.Web.Controllers
{
    public class ProblemaOsController : Controller
    {
        ProblemaOsRepositorioADO problemaADO = new ProblemaOsRepositorioADO();
        private siscreaEntitiesBD db = new siscreaEntitiesBD();

        [Authorize]
        public ActionResult Index()
        {
            string usu = User.Identity.Name;
            var permissao = new SelectList(db.FuncionarioPermissoes.Where(p => p.Login == usu && (p.Permissao == 9 || p.Permissao == 11)));

            if (permissao.Count() > 0)
            {
            var ListaDeProblemas = problemaADO.ListarProblemas();
            return View(ListaDeProblemas); 
            }
            else
            {
                TempData["notice"] = "Você não tem permissão para acessar essa página. É necessária a permissão: 0009";
                return RedirectToAction("../Os/Erro");
            }
        }

        [Authorize]
        public ActionResult Cadastrar() 
        {
            ViewBag.GrupoProblema = new SelectList(db.GrupoProblemas.OrderBy(p => p.Descricao), "Id", "Descricao");
            ViewBag.Prioridade = new SelectList(db.Prioridades.Where(p => p.Id != 0).OrderByDescending(p => p.Id ), "Id", "Descricao");
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Cadastrar(CREAPA.Dominio.Problema problema) 
        {
            ViewBag.Prioridade = new SelectList(db.Prioridades.Where(p => p.Id != 0).OrderByDescending(p => p.Id), "Id", "Descricao", problema.Prioridade);
            ViewBag.GrupoProblema = new SelectList(db.GrupoProblemas.OrderBy(p => p.Descricao), "Id", "Descricao", problema.GrupoProblema);
            if (ModelState.IsValid)
            {
                problemaADO.Salvar(problema);
                return RedirectToAction("Index");
            }
            return View(problema);
        }

        [Authorize]
        public ActionResult Alterar(int id)
        {
            var problema= problemaADO.ListarPorId(id);

            ViewBag.Prioridade = new SelectList(db.Prioridades.Where(p => p.Id != 0).OrderByDescending(p => p.Id), "Id", "Descricao", problema.Prioridade);
            ViewBag.GrupoProblema = new SelectList(db.GrupoProblemas.OrderBy(p => p.Descricao), "Id", "Descricao", problema.GrupoProblema);
                     
            if (problema == null)
            {
                return HttpNotFound();
            }
            return View(problema);
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Alterar(CREAPA.Dominio.Problema problema)
        {
            ViewBag.Prioridade = new SelectList(db.Prioridades.Where(p => p.Id != 0).OrderByDescending(p => p.Id), "Id", "Descricao", problema.Prioridade);
            ViewBag.GrupoProblema = new SelectList(db.GrupoProblemas.OrderBy(p => p.Descricao), "Id", "Descricao", problema.GrupoProblema);
            if (ModelState.IsValid)
            {
               problemaADO.Salvar(problema);
               return RedirectToAction("Index");
            }
            return View(problema);
        }

        [Authorize]
        public ActionResult Excluir(int id)
        {
            var problema = problemaADO.ListarPorId(id);

            ViewBag.Prioridade = new SelectList(db.Prioridades.Where(p => p.Id != 0).OrderByDescending(p => p.Id), "Id", "Descricao", problema.Prioridade);
            ViewBag.GrupoProblema = new SelectList(db.GrupoProblemas.OrderBy(p => p.Descricao), "Id", "Descricao", problema.GrupoProblema);

            if (problema == null)
            {
                return HttpNotFound();
            }
            return View(problema);
        }

        [HttpPost, ActionName("Excluir")]
        [ValidateAntiForgeryToken]
        public ActionResult ExcluirConfirmado(int id)
        {
            problemaADO.Excluir(id);
            return RedirectToAction("Index");
        }
    }
}
